package pe.edu.upc.jtigers.svpn.data.implement;

import java.util.Collection;
import org.springframework.stereotype.Repository;

import pe.edu.upc.jtigers.svpn.aplication.bean.FiltroPlanBean;
import pe.edu.upc.jtigers.svpn.aplication.excepcion.DAOExcepcion;
import pe.edu.upc.jtigers.svpn.data.common.BaseDao;
import pe.edu.upc.jtigers.svpn.data.queryable.PlanNegocioQueryable;
import pe.edu.upc.jtigers.svpn.domain.data.PlanNegocioDao;
import pe.edu.upc.jtigers.svpn.domain.model.PlanNegocio;

@Repository
public class PlanNegocioDaoImpl extends BaseDao<PlanNegocio> implements
		PlanNegocioDao {

	@Override
	public Collection<PlanNegocio> buscarPlanNegocio(FiltroPlanBean planNegocio)
			throws DAOExcepcion {
		Collection<PlanNegocio> lista = null;
		try {

			lista = this.getResultList(PlanNegocioQueryable.BUSCAR,
					planNegocio);

		} catch (Exception e) {
			throw new DAOExcepcion(e);
		}
		return lista;
	}

	@Override
	public PlanNegocio obtenerPlanNegocio(int idPlanNegocio)
			throws DAOExcepcion {
		try {
			return entityManager.find(PlanNegocio.class, idPlanNegocio);
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
	}

	@Override
	public PlanNegocio registrarPlanNegocio(PlanNegocio planNegocio)
			throws DAOExcepcion {
		try {
			if (planNegocio.getIdPlanNegocio() == 0) {
				entityManager.persist(planNegocio);
			} else {
				entityManager.merge(planNegocio);
			}
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
		return planNegocio;
	}

	@Override
	public PlanNegocio cambiarEstado(int id, int idEstado) throws DAOExcepcion {
		return entityManager.find(PlanNegocio.class, id);
	}

	@Override
	public PlanNegocio eliminarPlanNegocio(int idPlanNegocio)
			throws DAOExcepcion {
		PlanNegocio plan = this.obtenerPlanNegocio(idPlanNegocio);
		plan.setEliminado(true);
		this.registrarPlanNegocio(plan);
		return plan;
	}
}
